home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gekkan Dennou Club 142
/
Gekkan Dennou Club - 2000.3 Vol. 142 (Japan).7z
/
Gekkan Dennou Club - 2000.3 Vol. 142 (Japan) (Track 1).bin
/
tools
/
s_tool
/
file.c
< prev
next >
Wrap
Text File
|
1999-06-10
|
14KB
|
615 lines
#include "JX250.H"
#include <sys\iocs.h>
#include <sys\dos.h>
#include <sys\scsi.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <io.h>
#include <_tnb.c>
struct HEN {
UNchar *st;
int *po;
} hen[]={
{"SCSI-ID", &SCSI_ID},
//--- プレ座標
{"Pre-X1", &PreX1},
{"Pre-X2", &PreX2},
{"Pre-Y1", &PreY1},
{"Pre-Y2", &PreY2},
{"Pre-Mag", &PreBai}, // 0;標準 1;x2 2;x3 3;x4
{"Pre-ViewX", &PrePX}, // 拡大表示の時のイメージ表示座標
{"Pre-ViewY", &PrePY},
{"Pre-Speed", &PreViewS}, // 0;画質。1;速度
//--- スキャンサイズ
{"Scan-X", &ScanDotX},
{"Scan-Y", &ScanDotY},
{"ScanDPI-X", &ScanDpiX},
{"ScanDPI-Y", &ScanDpiY},
{"Scan-Speed", &ScanSpeed}, // 0;低速。1;速度
//--- 補正
{"Bright", &Bright}, // 濃度
{"Light-M", &LightM}, // 明度
{"Light-R", &LightR},
{"Light-G", &LightG},
{"Light-B", &LightB},
{"Gamma-M", &GammaM}, // γ
{"Gamma-R", &GammaR},
{"Gamma-G", &GammaG},
{"Gamma-B", &GammaB},
{"Thre-M", &ThreM}, // しきい値
{"Thre-R", &ThreR},
{"Thre-G", &ThreG},
{"Thre-B", &ThreB},
//--- モード
{"Scan-Mode", &ScanMode}, // スキャン値の単位 0;DPI 1;DOT
{"Pre-Unit", &PreUnit}, // プリスキャン値の単位 0;dot 1;cm 2;inch
{"Image-Mode", &ImageMode}, // 0;カラー 1;白黒
{"Image-Color", &ImageColMode}, // 0;多値 1;二値
{"Image-Direc", &ImageDirec}, // 0;縦 1;横
{"Poji-Nega", &PojiNegaMode}, // 0;ポジ 1;ネガ
{"Drop-Color", &DropColor}, // 0;なし 1;R 2;G 3;B
{"FullCol-Mode", &FullColor}, // 0;64k 1;24bit
{"HalfDisp-Mode", &C64halfMode}, // 0;中間処理あり 1;なし
{"Jpeged-Use", &JpegedUseMode}, // 0;64k の時使用する 1;使用しない
{"SaveFrm-Mode", &SaveFrmMode}, // 0;スキャンサイズに変更
// {"ReadPacket-Mode", &ReadPacketMode}, // 0;一括 1;分割
//--- その他
{"Asp-Mode", &AspMode}, //「画像」の 0;(2:3) 1;(1:1)
{"FilerSort-Mode", &FilerSortMode}, // 0;dir 1;filename
{"FilerAll-Mode", &FilerAllMode}, // 0;関係ファイルのみ表示 1;全ファイル表示
//--- 記録モード
{"Rec-X1", &RecX1},
{"Rec-Y1", &RecY1},
{"Rec-X2", &RecX2},
{"Rec-Y2", &RecY2},
//--- 画像モード
{"Img-Mag", &RecVwBai}, // 0;x1 1;x2 2;x4 3;x8
//-1;/2 -2;/4 -3;/8
{"Save-Mode", &RecSavMode}, // 0;CUT 1;PIC 2;GLM 3;BMP 4;JPEG 5;RGB
{"Gray-Thres", &GrayPoint}, // グレイスケール化の敷居値
{"Mono-Thres", &MonoPoint}, // 二値化の敷居値
{"Defocus-Point", &DefocusPoint}, // 平滑化の値
0,0
};
struct HENs {
UNchar *st;
UNchar *po;
} hens[]={
{"Jpeg-Swc", JpegSwc},
{"Jpeg24-Swc", Jpeg24Swc},
{"Jpeg24-temp", RGBtemp},
0,0
};
//=== ファイラー
/*struct DDST {
UNchar fname[21]; //ファイル名
UNchar fext[6]; //拡張子名(「.」から)
size_t size; //サイズ
int date; //日付
char atr; //属性
//UNchar fexm; //拡張子m 0;ex1 1;ex2の拡張子
};*/
struct DDST DDS[256];
int DDS_max; /*バッファの数 -1なら、未挿入 */
//UNchar Afname[21]; /*対照ファイル名*/
//UNchar Afext[6]; /*対照ファイル拡張子*/
UNchar Apath[256]; /*対象パス(カレントパス)*/
UNchar Afile[30]; /*対象ファイル名*/
int Drive; /*1=A: 2=B: ・・・ */
UNchar RSM[6][8]={ // 0;CUT 1;PIC 2;GLM 3;BMP 4;JPEG 5;RGB
"*.CUT","*.PIC","*.GLM",
"*.BMP","*.JPG","*.RGB"
};
UNchar *mat_vadds;
int mat_xwidth,mat_ywidth;
/*************************************************
コンフィグファイルを作る
[in] na = ファイル名
0 ならデフォルト
[out] -1 ; エラーった
*************************************************/
int CreateCnf(na)
char *na;
{
int i;
FILE *fp;
UNchar nb[256];
UNchar buf[256];
UNchar dmy[256];
if ( na==0 || *na==0 ){
//-- S_TOOLSのあるパス
struct _psp *pd = _dos_getpdb();
jstrcpy(nb,(char *)pd->exe_path);
if ( jxscanner_==_JX250_ )
jstrcat(nb,"S_TOOL25.CNF"); // JX250
elif ( jxscanner_==_JX270_ )
jstrcat(nb,"S_TOOL27.CNF"); // JX270
elif ( jxscanner_==_JX350_ )
jstrcat(nb,"S_TOOL35.CNF"); // JX350
elif ( jxscanner_==_JX330_ )
jstrcat(nb,"S_TOOL33.CNF"); // JX330
elif ( jxscanner_==_JX325_ )
jstrcat(nb,"S_TOOL32.CNF"); // JX325
else jstrcat(nb,"S_TOOL.CNF");
na=nb;
}
if ( DrvAccess(1,na)!=0 )
return(-1);
fp=fopen(na,"wt");
if ( fp==NULL )
return(-1);
for(i=0;;i++){
if ( hen[i].st==0 )
break;
sprintf(buf,"%-16s = %%d\n",hen[i].st);
fprintf(fp,buf,*hen[i].po);
}
for(i=0;;i++){
if ( hens[i].st==0 )
break;
sprintf(buf,"%-16s = %%s\n",hens[i].st );
fprintf(fp,buf,hens[i].po);
}
if ( ferror(fp) ){
//-- エラってた
// delete したほうがいい?
fclose(fp);
return(-1);
}
fclose(fp);
return(0);
}
/*************************************************
コンフィグファイルを読み込む
&設定する
[in] na = ファイル名
0 ならデフォルト
[out] -1 ; エラーった
*************************************************/
int ReadCnf(na)
char *na;
{
int i,j,l;
FILE *fp;
UNchar *s;
UNchar nb[256];
UNchar buf[1024];
UNchar name[32];
if ( na==0 || *na==0 ){
//-- S_TOOLSのあるパス
struct _psp *pd = _dos_getpdb();
jstrcpy(nb,(char *)pd->exe_path);
if ( jxscanner_==_JX250_ )
jstrcat(nb,"S_TOOL25.CNF"); // JX250
elif ( jxscanner_==_JX270_ )
jstrcat(nb,"S_TOOL27.CNF"); // JX270
elif ( jxscanner_==_JX350_ )
jstrcat(nb,"S_TOOL35.CNF"); // JX350
elif ( jxscanner_==_JX330_ )
jstrcat(nb,"S_TOOL33.CNF"); // JX330
elif ( jxscanner_==_JX325_ )
jstrcat(nb,"S_TOOL32.CNF"); // JX330
else jstrcat(nb,"S_TOOL.CNF");
na=nb;
}
if ( DrvAccess(0,na)!=0 )
return(-1);
fp=fopen(na,"r");
if ( fp==NULL )
return(-1);
JpegSwc[0]=0;
for(;;){
j=(int)fgets(buf,1023,fp);
if ( j==NULL )
break;
for(i=0;;i++){
if ( hens[i].st==0 )
break;
if ( sscanf(buf,"%s =",name)==1 && strcmp(hens[i].po,name)==0 ){
s=name;
while( *s++!='=' );
while( *s==' ' )
s++;
strcpy(hens[i].po,s);
s=hens[i].po;
while( *s!=0 ){
if ( ZenChk(*s) )
s++;
if ( *s==0xD || *s==0xA || *s==0x1A )
*s=0;
s++;
}
i=-1;
break;
}
}
if ( i<0 )
continue;
if ( sscanf(buf,"%s = %d",name,&l)!=2 )
continue;
for(i=0;;i++){
if ( hen[i].st==0 )
break;
if ( strcmp(hen[i].st,name)==0 ){
//一致した
*hen[i].po=l;
break;
}
}
}
fclose(fp);
//--
//CalcScanDpi();
//--
if ( jxscanner==_JX350_ ){
//jx350 なら・・・
if ( LightR==LightG && LightG==LightB ){
;
} else {
LightR=LightG=LightB;
}
if ( LightR>=0x8000+600 ){
LightR=LightG=LightB=0x8000+600;
}
}
return(0);
}
/******************************************************
ファイルサーチ
struct DDST {
UNchar fname[20]; //ファイル名
UNchar fext[6]; //拡張子名(「.」から)
size_t size; //サイズ
int date; //日付
}
******************************************************/
void FileSearch(mo)
int mo;
{
int m,n,z,nn,ol,ay;
char demmy[150];
char buf[256];
char olpth[256];
char *s;
char path[16];
ay=-1;
ol=-1;
olpth[0]=0;
if ( FilerAllMode==0 ){
// 0;関係ファイルのみ表示
jstrcpy(path,RSM[ RecSavMode ]);
} else {
// 1;全ファイル表示
jstrcpy(path,"*.*");
}
ViewFileY=0;
if ( mo==0 ){
Drive= GetDrvDir(Drive,Apath);
ChDrvDir(Apath);
}
if ( (_dos_drvctrl(0,Drive)&bit(1))==0 ){
/*未挿入?*/
DDS_max=-1; /*バッファの数 -1なら、未挿入 */
return;
}
_dos_drvctrl(2,Drive);
/*-- ディレクトリサーチ --*/
strsfn(Apath,demmy,buf,demmy,demmy);
//printf("%s\n",demmy);
if ( (buf[0]=='\\' && buf[1]==0) || buf[0]==0 ){
//ルートだ
n=0;
} else {
n=1;
DDS[0].fname[0]='.';
DDS[0].fname[1]='.';
DDS[0].fname[2]=0;
DDS[0].fext[0]=0;
DDS[0].atr=bit(4);
}
for(z=nn=0,m=0;n<256;n++,m++){
if ( m==0 )
s= files(buf,&(DDS[n].atr),&(DDS[n].date),&(DDS[n].size),"*.*",bit(4));
else s=nfiles(buf,&(DDS[n].atr),&(DDS[n].date),&(DDS[n].size));
if ( s==NULL )
break;
if ( s[0]=='.' && s[1]==0 ){
n--;
continue;
}
if ( s[0]=='.' && s[1]=='.' && s[2]==0 ){
n--;
z=1;
continue;
//DDS[n].fname[0]='.';
//DDS[n].fname[1]='.';
//DDS[n].fname[2]=0;
//DDS[n].fext[0]=0;
} else {
strsfn(s,demmy,demmy,&(DDS[n].fname),&(DDS[n].fext));
}
//DDS[n].fexm=0;
}
DDS_sort(z,n-1,FilerSortMode); // ディレクトリだけでソート
/*-- ファイルチェック --*/
z=n;
for(nn=n,m=0;n<256;n++,m++){
if ( m==0 )
s= files(buf,&(DDS[n].atr),&(DDS[n].date),&(DDS[n].size),path,bit(5));
else s=nfiles(buf,&(DDS[n].atr),&(DDS[n].date),&(DDS[n].size));
if ( s==NULL )
break;
strsfn(s,demmy,demmy,&(DDS[n].fname),&(DDS[n].fext));
//DDS[n].fexm=0;
}
DDS_sort(z,n-1,FilerSortMode);
DDS_max=n; /*バッファの数 -1なら、未挿入 */
_dos_drvctrl(3,Drive);
}
/****************************************************
カレントを文字列のドライヴ/ディレクトリにする
[戻り値]ドライヴナンバー( 1=A: 2=B: ・・・)
****************************************************/
int ChDrvDir(st)
UNchar *st;
{
int i;
i=(st[0]|0x20)-'a';
if ( _dos_chgdrv(i)<i ) /*カレントドライヴチェンジ*/
return( i+1 );
_dos_chdir(st);
return( i+1 );
}
/****************************************************
今のカレントを読みだす
[戻り値]ドライヴナンバー( 1=A: 2=B: ・・・)
****************************************************/
int GetDrvDir(d,st)
int d;
UNchar *st;
{
if ( d<=0 )
d=_dos_curdrv()+1;
st[0]='A'+d-1;
st[1]=':';
st[2]='\\';
st[3]=0; // curdir がエラーの可能性あり。
_dos_curdir(d,&st[3]);
if ( st[3]!=0 )
jstrcat(&st[3],"\\");
return(d);
}
/****************************************************
ファイル名主部と拡張を合成してコピー
****************************************************/
void jstrcpyfnm(ss,fm,ex)
UNchar *ss,*fm,*ex;
{
jstrcpy(ss,fm);
if ( ex[0]!=0 ){
jstrcat(ss,".");
jstrcat(ss,ex);
}
}
/*++*/
void jstrcatfnm(ss,fm,ex)
UNchar *ss,*fm,*ex;
{
jstrcat(ss,fm);
if ( ex[0]!=0 ){
jstrcat(ss,".");
jstrcat(ss,ex);
}
}
/***************************************************
Fread(f,ad,ll)
[戻り値] 0:正常成功
エラー文字列
***************************************************/
char *Fread(f,ad,ll)
int f;
void *ad;
int ll;
{
int r;
static UNchar fsm[]="ファイルサイズが足りません";
static UNchar fwer[]="読み込みエラーです";
r=_dos_read(f,ad,ll);
if ( r<0 )
return(fwer); //読み込みエラー
if ( r==ll )
return((char*)0);
return(fsm); //読み込みエラー(足りない)
}
/***************************************************
Fwrite(f,ad,ll)
[戻り値] 0:正常成功
エラー文字列
***************************************************/
char *Fwrite(f,ad,ll)
int f;
void *ad;
int ll;
{
int r;
static UNchar erf[]="ディスクフルです";
static UNchar er[]="書き込みエラーです";
r=_dos_write(f,ad,ll);
if ( r<0 )
return(er);
if ( r==ll )
return((char*)0);
return(erf);
}
/***************************************************
新しいファイルをオープン
[戻り値] 0:正常成功
-1:エラー
***************************************************/
int NewFileCreate()
{
int f;
if ( DrvAccess(1,Afile)!=0 ){
Dialog(0,"プロテクトされています",0,1);
return(-1);
}
f=_dos_open(Afile,0);
if ( f>=0 ){
// ファイルが open できた
_dos_close(f);
if ( Dialog("同名ファイルがあります",0,"重ね書きしますか?",2)!=0 )
return(-1);
}
f=_dos_create(Afile,bit(5));
return(f);
}
/***************************************************
MAT.$$$ を読み込みチェックする
[戻り値] 0:正常成功
***************************************************/
int MatDefRead()
{
int i;
FILE *f;
UNchar *s;
UNchar buf[256];
UNchar MAT[256]; //MATIER のあるパス
UNchar dmi[512];
i=_dos_getenv("MATIER",0,MAT); // 環境変数MATIERの中身を得る
if ( i<0 ){
printf(" 環境変数`MATIER'が設定されていません。\n");
return(-1);
}
for(s=MAT;*s!=0;s++);
if ( *s-1!='\\' ){ //最後に\がついているか?
*s++='\\';
*s=0;
}
strcat(MAT,"MAT.$$$"); //MAT.$$$のフルパス、のはず
if ( DrvAccess(0,MAT)!=0 ){
printf( " 環境変数`MATIER'の内容のドライブは用意されていません。\n");
return(-1);
}
f=fopen(MAT,"rt");
if ( f==NULL ){
printf( " MAT.$$$が見つかりません。\n"
" 環境変数`MATIER'の内容に誤りがある可能性があります。\n"
);
return(-1);
}
while( fgets(buf,128,f)!=NULL ){
if ( buf[0]=='V' && buf[1]==' ' ){
sscanf(buf,"%s %p %d %d",dmi,&mat_vadds,&mat_xwidth,&mat_ywidth);
break;
}
}
fclose( f );
if ( (int)mat_vadds==0 ){
printf( " MATIER で仮想画面が設定されていないようです。\n");
return(-1);
}
//printf( " adds=%X,x=%d,y=%d\n",mat_vadds,mat_xwidth,mat_ywidth);
return(0);
}
/********************************************************
このドライブは xx できる?
[in] md=0 ; アクセスできる?
1 ; 書き込みできる?
[out] 0 ; 可能
-1 ; 出来ない
********************************************************/
int DrvAccess(md,st)
int md;
UNchar *st;
{
int i,j,d;
UNchar buf[256];
UNchar dmy[256];
strsfn(st,buf,dmy,dmy,dmy);
d=((buf[0]|0x20)-'a');
if ( d<0 || d>26 )
d=_dos_curdrv();
j=_dos_drvctrl(0,d+1);
// printf("drive=%d r=%02X\n",d,j);
if ( md==0 ){
if ( (j&bit(1))!=0 && (j&bit(2))==0 )
return(0);
} elif ( md==1 ){
if ( (j&bit(1))!=0 && (j&bit(3))==0 )
return(0);
}
return(-1);
}
/**************************************/
static char Dsof=1; //降順なら負の数に
/*+++*/
/*---------|name|-----------*/
static int Dso_Name(D1,D2)
struct DDST *D1,*D2;
{
int j;
char d1[21],d2[21];
j=jstrcmpi(D1->fname,D2->fname);
if ( j!=0 )
return( (Dsof==1)?j:-j );
/*名前が同じなら拡張子を見る*/
j=jstrcmpi(D1->fext,D2->fext);
return( (Dsof==1)?j:-j );
}
/*---------|exp|-----------*/
static int Dso_Ext(D1,D2)
struct DDST *D1,*D2;
{
int j;
char d1[21],d2[21];
j=jstrcmpi(D1->fext,D2->fext);
if ( j!=0 )
return( (Dsof==1)?j:-j );
/*拡張子が同じなら名前を見る*/
j=jstrcmpi(D1->fname,D2->fname);
return( (Dsof==1)?j:-j );
}
/*---------|size|-----------*/
static int Dso_Size(D1,D2)
struct DDST *D1,*D2;
{
int i=D1->size;
int j=D2->size;
return( (i==j)?0:(i<j)?-Dsof:Dsof );
}
/*---------|date|-----------*/
static int Dso_Date(D1,D2)
struct DDST *D1,*D2;
{
int i=D1->date;
int j=D2->date;
return( (i==j)?0:(i<j)? Dsof:-Dsof );
}
/*+++++++++++++++++++++++++++++*/
static void DDS_sort(s1,s2,sm)
int s1,s2,sm;
{
static (*foo[4])={Dso_Name,Dso_Date,Dso_Size,Dso_Ext};
//sm = 1:name順 2:date順 3:サイズ順 4:exp順 (負の数なら降順)
int i,j,m,n,z;
int b;
if ( sm==0 ) return;
if ( sm<0 ) {
sm=-sm;
Dsof=-1; //降順なら負の数に
} else Dsof=1;
sm--;
qsort( &DDS[s1],s2-s1+1,sizeof(struct DDST),foo[sm] );
}